package broadcast;

import android.app.Activity;
import android.content.ContentResolver;
import android.content.ContentValues;
import android.database.ContentObserver;
import android.database.Cursor;
import android.net.Uri;
import android.os.Bundle;
import android.os.Handler;
import android.support.annotation.Nullable;
import java.util.LinkedHashMap;
import java.util.Map;

/**
 * 创建时间：2018年03月14日10:17 <br>
 * 作者：fuchaoyang <br>
 * 描述：
 */

public class TestContentResolver extends Activity {

  @Override protected void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    Uri uri = MyContentProvider.CONTENT_URI;
    ContentResolver resolver = getContentResolver();

    resolver.registerContentObserver(uri, true, new MyContentObserver(/*new Handler()*/null));

    //在通过 ContentResolver 进行数据请求时（比如 contentResolver.insert(uri, contentValues);），
    //系统会检查指定 URI 的 authority 信息，然后将请求传递给注册监听这个 authority 的 ContentProvider 。
    //这个 ContentProvider 可以监听 URI 想要操作的内容，Android 中为我们提供了 UriMatcher来解析 URI。
    ContentValues values = new ContentValues();
    values.put("name", "zhangsan");
    values.put("note", "xixi");

    resolver.insert(uri, values);

    Cursor cursor = resolver.query(uri, null, null, null, null);
    StringBuilder sb = new StringBuilder();
    if (cursor != null) {
      while (cursor.moveToNext()) {
        sb.append(
          cursor.getString(0) + "," + cursor.getString(1) + "," + cursor.getString(2) + "\n");
      }
      cursor.close();
    }
    System.out.println("sb.toString() = " + sb.toString());
  }

  private class MyContentObserver extends ContentObserver {

    /**
     * Creates a content observer.
     *
     * @param handler The handler to run {@link #onChange} on, or null if none.
     */
    public MyContentObserver(Handler handler) {
      super(handler);
    }

    @Override public void onChange(boolean selfChange) {
      // TODO 监听到 ContentProvider数据变化
    }
  }
}
